Skip to content

fix(layout): measure a label without a shape of its own in the paragraph end's - #473

Merged
airmang merged 3 commits into
mainfrom
fix/page-estimate-label-paragraph-end-shape
Oct 16, 2026
Merged

airmang merged 3 commits into
mainfrom
fix/page-estimate-label-paragraph-end-shape

Conversation

@airmang

@airmang airmang commented Oct 16, 2026

Copy link
Copy Markdown
Owner

What

A bullet or number label without a character shape of its own (hh:paraHead@charPrIDRef unset) now takes the character shape of the paragraph's end (its last run), as Hancom Office lays it out:

  • the label's room is measured at that size, and
  • that size counts in the first line's height (when it is larger than the line's smallest character).

Before, the estimate took the shape of the paragraph's first character. So outline and numbered paragraphs that mix sizes (the template's outline paragraphs, say) broke their lines and set their first lines' height otherwise than Hancom.

text_style_from_refs takes the paragraph end's character shape as an optional end_char_pr_id_ref; FormFit callers that do not pass it keep the text's shape.

Tests

  • New Hancom-saved fixtures (saved by Hancom Office 2024, scrubbed): outline paragraphs of levels 1–7 whose two to four runs differ in size, some ending in an empty run. Without the line caches they fail before this change and pass after.
  • test_a_label_without_a_shape_of_its_own_takes_the_paragraph_ends checks the label's room in the text's and the end's shape.

🤖 Generated with Claude Code

@airmang airmang left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

32aa36f 검토 완료. 문단 끝 run의 글자 모양 선택, 스타일 캐시 키와 첫 줄 높이 반영를 확인했습니다. 별도 Python 3.12 체크아웃에서 관련 테스트 13개가 통과했고 검토 범위에서 재현된 코드 결함은 찾지 못했습니다. 해당 head의 GitHub 검사 13개는 모두 성공했습니다. 다만 #470/#471 병합 뒤 최신 main dae1ee2c60014e3ed6d1c290bc79e7d64d73a710과의 병합 충돌이 있어 이번에는 보류합니다. git merge-tree와 GitHub의 CONFLICTING 상태로 확인했으며, 충돌 파일은 CHANGELOG.md입니다. main을 merge해 양쪽 변경을 보존하고 충돌을 해결한 최신 head에서 검사를 통과하면 다시 검토하겠습니다.

…aph end's

A bullet or number label without a character shape of its own (hh:paraHead@charPrIDRef unset) takes the character shape of the paragraph's end, its last run, as Hancom Office lays it out: its room comes from that size, and that size counts in the first line's height. Before, the estimate took the shape of the paragraph's first character, so outline and numbered paragraphs mixing sizes broke their lines and set their first lines' height otherwise than Hancom.

Hancom-saved fixtures hold outline paragraphs of several levels whose runs differ in size, some ending in an empty run.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@airmang
airmang force-pushed the fix/page-estimate-label-paragraph-end-shape branch from 32aa36f to 9765613 Compare October 16, 2026 06:19

@airmang airmang left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

9765613 검토 완료. 문단 끝의 글자 모양을 라벨 측정과 첫 줄 높이에 사용하는 경로 및 캐시 키를 다시 확인했습니다. 이전 검토와 range-diff상 기능 변경 없이 main/변경 기록 위치가 갱신됐습니다. 해당 최신 head의 CI 전체 성공과 실제 Python 3.12 로그(6764 passed, 18 skipped, 1 xfailed; coverage 기준 및 Ruff·mypy·Pyright·공개 저장소 게이트 통과)를 확인했습니다. 검토 범위에서 재현된 코드 결함은 찾지 못했습니다. 다만 #475/#468/#472 병합 후 최신 main 0193c010218cb5c0abeed891be2aab4ec9de2f80과 CHANGELOG.md 내용 충돌이 발생함을 git merge-tree로 확인해 병합을 보류합니다. main의 변경 기록을 함께 보존하여 충돌을 해결한 뒤 새 head의 검사와 통합 결과를 다시 검증해야 합니다.

@airmang airmang left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

문단 마지막 run의 글자 모양으로 라벨 폭과 첫 줄 높이를 재는 경로 및 캐시 키를 검토했습니다. 충돌은 양쪽 기록과 테스트를 보존해 해결했고, 재배치 전후 함수·데코레이터·데이터의 의미가 같음을 대조했습니다. Python 3.10–3.14 전체 CI, CodeQL, 의존성 검사가 모두 성공했습니다. 같은 커밋의 중복 PR 테스트 실행은 취소하고 push 매트릭스 성공을 확인했습니다. 최종 통합본의 관련 테스트 1,692개도 통과했습니다. 검토한 head를 지정하여 squash 병합합니다.

@airmang
airmang merged commit 7634e6c into main Oct 16, 2026
8 of 13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant